package com.example.testhilt.module

import javax.inject.Inject

/**
 ********************************************************
 *Author: chinadragon
 *Time: 2020/11/24 10:29 AM
 *Name: Hilt的简单用法
 *Overview:
 *
 *  1、带参数的依赖注入
 *
 *  2、接口的依赖注入
 *
 *  3、给相同类型注入不同的实例
 *
 *  https://mp.weixin.qq.com/s/OEX1d2cU1zGG5BBM-nANBg
 *Usage:
 ********************************************************
 */

/*

    Hilt大幅简化了Dagger2的用法，使得我们不用通过@Component注解去编写桥接层的逻辑，但是也因此限定了注入功能只能从几个Android固定的入口点开始。

    Hilt一共支持6个入口点，分别是：

    Application
    Activity
    Fragment
    View
    Service
    BroadcastReceiver

    其中，只有Application这个入口点是使用@HiltAndroidApp注解来声明的，这个我们刚才已经看过了。其他的所有入口点，都是用@AndroidEntryPoint注解来声明的。


 */
class Truck @Inject constructor(val driver: Driver) {

//    @Inject
//    lateinit var engine: Engine

    @BindGasEngine// 给相同类型注入不同的实例
    @Inject
    lateinit var gasEngine: Engine

    @BindElectricEngine// 给相同类型注入不同的实例
    @Inject
    lateinit var electricEngine: Engine


    fun deliver(){
//        engine.start()
        gasEngine.start()
        electricEngine.start()
        println("truck is delivering cargo Driven by $driver")
//        engine.shutdown()

        gasEngine.shutdown()
        electricEngine.shutdown()

    }
}